summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/filesystem/fsp/fs_i_directory.cpp
blob: 8483394d0c7f41b51aa7d3d8255f364aab9f8bb1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#include "core/file_sys/fs_filesystem.h"
#include "core/file_sys/savedata_factory.h"
#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/filesystem/fsp/fs_i_directory.h"

namespace Service::FileSystem {

IDirectory::IDirectory(Core::System& system_, FileSys::VirtualDir directory_,
                       FileSys::OpenDirectoryMode mode)
    : ServiceFramework{system_, "IDirectory"},
      backend(std::make_unique<FileSys::Fsa::IDirectory>(directory_, mode)) {
    static const FunctionInfo functions[] = {
        {0, D<&IDirectory::Read>, "Read"},
        {1, D<&IDirectory::GetEntryCount>, "GetEntryCount"},
    };
    RegisterHandlers(functions);
}

Result IDirectory::Read(
    Out<s64> out_count,
    const OutArray<FileSys::DirectoryEntry, BufferAttr_HipcMapAlias> out_entries) {
    LOG_DEBUG(Service_FS, "called.");

    R_RETURN(backend->Read(out_count, out_entries.data(), out_entries.size()));
}

Result IDirectory::GetEntryCount(Out<s64> out_count) {
    LOG_DEBUG(Service_FS, "called");

    R_RETURN(backend->GetEntryCount(out_count));
}

} // namespace Service::FileSystem